﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using blacksoft.Models;
using blacksoft.Constantes;
using System.Data.Entity.Core.Objects;

namespace blacksoft.Controllers
{
    public class ArqueoDeCajaController : Controller
    {
        private inf245travelbusEntities db = new inf245travelbusEntities();

        // GET: /ArqueoDeCaja/
        public ActionResult Index()
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }

            int id_persona = (int)Session["Session_CodigoPersona"];
            int id_terminal = (int)Session["IDTerminal"];

            var arqueos = from a in db.ArqueoDeCaja
                          join p in db.Persona on a.IDPersona equals p.IDPersona
                          where a.IDPersona == id_persona && p.IDTerminal==id_terminal 
                          select a;
            return View(arqueos);
        }

        // GET: /ArqueoDeCaja/Details/5
        public ActionResult Details(int? id)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }

            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            ArqueoDeCaja arqueodecaja = db.ArqueoDeCaja.Find(id);
            if (arqueodecaja == null)
            {
                return HttpNotFound();
            }

            return View(arqueodecaja);
        }

        // GET: /ArqueoDeCaja/Create
        public ActionResult Create()
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }

            int id_operario_repetido = (int)Session["Session_CodigoPersona"];
            var qry_arqueo_repetido = from a in db.ArqueoDeCaja
                                      where a.IDPersona == id_operario_repetido
                                      select a;
            qry_arqueo_repetido = qry_arqueo_repetido.Where(s => EntityFunctions.TruncateTime(s.FechaArqueo) == EntityFunctions.TruncateTime(DateTime.Now));

            if (qry_arqueo_repetido.Count() > 0)
            {
                TempData["create_failure"] = "Ya no se pueden hacer más arqueos por el día de hoy";
                return RedirectToAction("Index");
            }


            ArqueoDeCaja arqueo = new ArqueoDeCaja();

            int id_operario = (int)Session["Session_CodigoPersona"];
            var qry_ventas = from v in db.Venta
                             where v.IDPersona == id_operario
                             select v;         
            qry_ventas = qry_ventas.Where(s => EntityFunctions.TruncateTime(s.FechaPago) == EntityFunctions.TruncateTime(DateTime.Now));

            decimal? acum_soles = 0;
            decimal? acum_dolares = 0;
            decimal? acum_total = 0;
            decimal? acum_notas = 0;

            foreach (var venta in qry_ventas)
            {
                acum_dolares += venta.MontoDolares;
                acum_soles += venta.MontoSoles;
                acum_total += venta.MontoEfectivo + venta.MontoNotaCredito;
                acum_notas += venta.MontoSoles;
            }

            arqueo.FechaArqueo = DateTime.Now;
            arqueo.MontoNotaCredito = acum_notas;
            arqueo.MontoSoles = acum_soles;
            arqueo.MontoDolares = acum_dolares;
            arqueo.MontoSistema = acum_total;

            if (Session["UnidadDeVenta"] != null)
                arqueo.IDUnidadVenta = (int)Session["UnidadDeVenta"];
            else
                arqueo.IDUnidadVenta = null;
            arqueo.IDPersona = id_operario;

            return View(arqueo);
        }

        // POST: /ArqueoDeCaja/Create
        // Para protegerse de ataques de publicación excesiva, habilite las propiedades específicas a las que desea enlazarse. Para obtener 
        // más información vea http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "IdArqueoCaja,IDUnidadVenta,IDPersona,FechaArqueo,MontoNotaCredito,MontoSoles,MontoDolares,MontoSistema,montoConteo,Descuadre")] ArqueoDeCaja arqueodecaja)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }

            if (ModelState.IsValid)
            {
                db.ArqueoDeCaja.Add(arqueodecaja);
                try
                {
                    db.SaveChanges();// guardamos venta y se genera IDVenta
                }
                catch
                {
                    TempData["create_failure"] = "El arqueo de caja no se pudo registrar";
                    return RedirectToAction("Index");
                }
                TempData["create_success"] = "El arqueo de caja se registró exitosamente";

                return RedirectToAction("Index");
            }

            return View(arqueodecaja);
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}
